﻿#define _CRT_SECURE_NO_WARNINGS 1
#include"SeqList.h"

//初始化通讯录
void ContactInit(Contact* con)
{
	SLInit(con);
}

//添加通讯录数据（采用尾插）
void ContactAdd(Contact* con)
{
	assert(con);
	PeoInfo pe;
	printf("请输入姓名\n");
	scanf("%s", pe.name);
	printf("请输入性别\n");
	scanf("%s", pe.sex );
	printf("请输入年龄\n");
	scanf("%d", &pe.age);
	printf("请输入联系电话\n");
	scanf("%s", pe.tel);
	printf("请输入地址\n");
	scanf("%s", pe.addr);
	SLPushBack(con, pe);
	printf("插入成功\n");
}

int ConFinename(Contact* con, char* name)
{
	for (int i = 0; i < con->size; i++)
	{
		if (strcmp(con->arr[i].name, name) == 0)
			return i;
	}
	return - 1;
}
//删除通讯录数据（根据名字删除）
void ContactDel(Contact* con)
{
	assert(con);
	assert(con->size);
	printf("请输入删除的名字\n");
	char delname[NAME_MAX];
	scanf("%s", delname);
	//查找在不在
	int ret;
	if ((ret = ConFinename(con, delname)) >= 0)
	{
		SLErase(con, ret);
		printf("删除成功！！！\n");
	}
	else
		printf("输入不存在\n");
}

//展示通讯录数据
void ContactShow(Contact* con)
{
	printf("姓名  性别  年龄  电话  地址\n");
	for (int i = 0; i < con->size; i++)
	{
		printf("%4s  %4s  %4d  %4s  %4s\n", con->arr[i].name,con->arr[i].sex, con->arr[i].age, con->arr[i].tel, con->arr[i].addr);
	}
}

//查找通讯录数据
void ContactFind(Contact* con)
{
	assert(con);
	assert(con->size);
	printf("请输入你要查找的联系人姓名\n");
	char findname[NAME_MAX];
	scanf("%s", findname);
	int ret;
	if ((ret = ConFinename(con, findname)) >= 0)
	{
		printf("找到了，下标为 %d \n", ret);
		return;
	}
	printf("没找到\n");
}

//修改通讯录数据
void ContactModify(Contact* con)
{
	assert(con);
	assert(con->size);
	printf("请输入你要修改的联系人姓名\n");
	char findname[NAME_MAX];
	scanf("%s", findname);
	int ret;
	if ((ret = ConFinename(con, findname)) >= 0)
	{
		printf("请输入新的联系人信息\n");
		PeoInfo pe;
		printf("请输入姓名\n");
		scanf("%s", pe.name);
		printf("请输入性别\n");
		scanf("%s", pe.sex);
		printf("请输入年龄\n");
		scanf("%d", &pe.age);
		printf("请输入联系电话\n");
		scanf("%s", pe.tel);
		printf("请输入地址\n");
		scanf("%s", pe.addr);
		con->arr[ret] = pe;
		printf("修改成功\n");
		return;
	}
	printf("没有此联系人\n");
}

//销毁通讯录数据
void ContactDestroy(Contact* con)
{
	ContactWrite(con);
	SLDestroy(con);
}

//将通讯录信息存储在文件中
void ContactWrite(Contact* con)
{
	FILE* pf = fopen("Contact.txt", "wb");
	if (!pf)
	{
		perror("fopen");
		return;
	}
	//写入
	for (int i = 0; i < con->size; i++)
	{
		//fwrite(con->arr[i].name, 1, NAME_MAX, pf);
		//fwrite(con->arr[i].sex, 1, SEX_MAX, pf);
		//fwrite(&con->arr[i].age, 4, 1, pf);
		//fwrite(con->arr[i].tel, 1, TEL_MAX, pf);
		//fwrite(con->arr[i].addr, 1, ADDR_MAX, pf);
		fwrite(&con->arr[i], sizeof(PeoInfo), 1, pf);
	}
	printf("写入文件正确\n");
	fclose(pf);
	pf = NULL;
}

//将文件信息读出
void ContactRead(Contact* con)
{
	FILE* pf = fopen("Contact.txt", "rb");
	if (!pf)
	{
		perror("fopen");
		return;
	}
	//读出
	PeoInfo pe;

	//while (fread(pe.name, 1, NAME_MAX, pf) == NAME_MAX &&
	//	fread(pe.sex, 1, SEX_MAX, pf) == SEX_MAX &&
	//	fread(&pe.age, 4, 1, pf) == 1 &&
	//	fread(pe.tel, 1, TEL_MAX, pf) == TEL_MAX &&
	//	fread(pe.addr, 1, ADDR_MAX, pf) == ADDR_MAX)
	while (fread(&pe, sizeof(PeoInfo), 1, pf) == 1)
	{
		SLPushBack(con, pe);
	}

	if (feof(pf))
		printf("文件读取中正常\n");
	else if(ferror(pf))
		printf("文件读取中异常\n");
	fclose(pf);
	pf = NULL;
}
